package com.lagou.sqlSession;

import java.sql.SQLException;
import java.util.List;

public interface SqlSession {

    /**
     * 查询列表
     *
     * @param statementId namespace.id
     * @param params      参数
     */
    <E> List<E> selectList(String statementId, Object... params) throws Exception;

    /**
     * 查询单条记录
     *
     * @param statementId namespace.id
     * @param params      参数
     */
    <T> T selectOne(String statementId, Object... params) throws Exception;

    /**
     * 更新记录
     *
     * @param statementId namespace.id
     * @param params 参数
     */
    int update(String statementId, Object... params) throws Exception;

    /**
     * 删除记录
     *
     * @param statementId namespace.id
     * @param params 参数
     */
    int delete(String statementId, Object... params) throws Exception;

    /**
     * 插入记录
     *
     * @param statementId namespace.id
     * @param params 参数
     */
    int insert(String statementId, Object... params) throws Exception;

    /**
     * 获取 mapper 接口的代理类
     *
     * @param mapperClass mapper接口的Class
     * @param <T>
     */
    <T> T getMapper(Class<?> mapperClass);

    /**
     * 关闭会话
     */
    void close() throws SQLException;

}
